'''
Created on 06/10/2013

@author: daniel
'''
import unittest
import mapeadorContrasenias

class VerificadorDeContrasenia():
    '''
    Utiliza a la clase mapeadorDeContrasenias para la encapsulacion de HashTable,
    en otra circunstancia se podria modificar
    '''
    def __init__(self):
        '''
        MapeadorDeContrasenias hereda de HashTableAbierto
        '''
        self.__mapeador__=mapeadorContrasenias.MapeadorDeContrasenias()
        
    def guardarClave(self,usuario, passwd):
        self.__mapeador__.hashAdd(usuario, passwd)

    def verificarClave(self,usuario, passwd):
        return self.__mapeador__.hashChk(usuario, passwd)

class Test(unittest.TestCase):


    def testInit(self):
        self.assertIsInstance(VerificadorDeContrasenia(), VerificadorDeContrasenia, "Verifica creacion")

    def testHashAdd(self):
        obj=VerificadorDeContrasenia()
        obj.guardarClave("elem","ContrasENia")
        self.assertNotEquals(obj.__mapeador__.__tabl__[obj.__mapeador__.getHashEntry("elem","Contra")],"elem", "Verifica correcto inacceso al elem")
        self.assertEquals(obj.__mapeador__.__tabl__[obj.__mapeador__.getHashEntry("elem","ContrasENia")],"elem", "Verifica correcto acceso al elem")
        
    def testHashChk(self):
        obj=VerificadorDeContrasenia()
        obj.guardarClave("elemento","ContrasENia")
        self.assertFalse(obj.verificarClave("selfelem","ContrasENia"), "Verifica selfelem no ingresado")
        self.assertTrue(obj.verificarClave("elemento","ContrasENia"), "Verifica elemento ingresado")
        self.assertFalse(obj.verificarClave("selfelem","otraContrasENia"), "Verifica selfelem no ingresado")
        self.assertFalse(obj.verificarClave("elemento","otraContrasENia"), "Verifica selfelem no ingresado")
        obj1=VerificadorDeContrasenia()
        obj1.guardarClave("daniel","rosatto")
        self.assertFalse(obj1.verificarClave("selfelem","ContrasENia"), "Verifica selfelem no ingresado")
        self.assertTrue(obj1.verificarClave("daniel","rosatto"), "Verifica elemento ingresado")
        self.assertFalse(obj1.verificarClave("daniel","ContrasENia"), "Verifica selfelem no ingresado")
        self.assertFalse(obj1.verificarClave("elemento","rosatto"), "Verifica selfelem no ingresado")


if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()